<?php

/**
 * alumnefront actions.
 *
 * @package    Projecte Final de Carrera
 * @subpackage alumnefront
 * @author     Jaume Fernandez
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class alumnefrontActions extends sfActions {

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeIndex(sfWebRequest $request) {
        //$this->forward('default', 'module');
    }

    //TODO: Parametres de les activitats per POST
    public function executePlay(sfWebRequest $request) {
        //$this->forward('default', 'module');

        $this->id = $request->getParameter('id');
        $this->actualitzaEstat($this->id);
        //   $this->activitat = new Activitat();
        //   $this->activitat->setId("1");
        //   $this->anterior = Doctrine_Core::getTable('Activitat')->find(array($this->id));
        //    $this->tipus = $this->anterior->getSeguent();
        $this->activitat = $this->planifica($this->id);
    }

    /*
     * - Si s'ha arribat al final d'un mòdul es buscarà el seguent disponible
     * - Si un usuari deixa un modul a mitges, a la propera sessio es continuarà.
     * - Si s'ha arribat al final d'un mòdul, se seguirà pel el modul disponible
     * de l'assignatura amb més %.
     * FALTA controlar quan s'ha acabat el pla d'estudis!!!!
     */

    private function planifica($id_ant) {
        //Si $id_ant == false, estem fent la primera activitat de la sessio
        if ($id_ant) {
            $anterior = Doctrine_Core::getTable('Activitat')->find($id_ant);
            //->find(array($id_ant));
            //Ultima activitat del modul?
            if ($anterior->getSeguent()) {
                $seguent = $anterior->getSeguent();
            } else {
                $moduls_id = busca_moduls_disponibles();
                $seguent = menor_percentatge($moduls_id);
            }
        } else {
            $moduls_id = $this->busca_moduls_disponibles();
            $seguent = $this->menor_percentatge($moduls_id);
        }
        //$this->forward404Unless($this->activitat);

        return $seguent = new Activitat(); //PROVISIONAL
    }

    private function busca_moduls_disponibles() {
        //Agafem l'identificador de l'usuari
        $id_alumne = $this->getUser()->getAttribute('id');
        $alumne = Doctrine_Core::getTable('Alumne')->find($id_alumne);
/*
        echo 'valor: ' . $alumne . '<br>';
          echo 'tipus: ' . gettype($alumne);
          echo '<br>';
          if ($alumne == 0)
          echo 'zero';
          echo '<br>';
       */  
        //->find(array($id_alumne));
        //Cerquem les materies on està matriculat l'usuari
        $materies1 = $alumne->getPlaEstudis()->getMateria();
        $materies2 = $alumne->getPlaEstudis()->getMateria();

        foreach ($materies1 as $ma0) {
            $depen = 0;
            $q = Doctrine_Core::getTable('Estat')
                            ->createQuery('c')
                            ->where('c.alumne_id = ?', $id_alumne)
                            ->andWhere('c.materia_id = ?', $ma0->getId());
            $activitat = $q->execute();
            $mo0 = $activitat->getModul();

            foreach ($materies2 as $ma1) {
                if ($ma0 == $ma1) {
                    $depen = 1;
                } else {
                    $q = Doctrine_Core::getTable('Estat')
                                    ->createQuery('c')
                                    ->where('c.alumne_id = ?', $id_alumne)
                                    ->andWhere('c.materia_id = ?', $ma1->getId());
                    $activitat = $q->execute();
                    $mo1 = $activitat->getModul();

                    if ($this->depenDe($mo0, $mo1)) {
                        $depen = 1;
                    }
                }

                if ($depen == 0) {
                    //TODO: afegir id del modul a un array
                }
            }
        }
    }

    /*
     * Cal tenir una taula d'Estat consistent per a que això funcioni
     * com s'espera
     */

    private function depenDe($m0, $m1) {
        $depen = 0;
        $q = Doctrine_Core::getTable('DepenDe')
                        ->createQuery('c')
                        ->where('c.predecessor_id = ?', $$m1->getId())
                        ->andWhere('c.successorid = ?', $m0->getId());
        if ($q->execute())
            return 1;
        else
            return 0;
    }

    private function menor_percentatge($moduls_id) {
        $major = 100;
        foreach ($moduls_id as $id) {
            $modul = Doctrine_Core::getTable('Modul')->find($id);
            if ($modul->getMateria()->getFinalizat() < $major) {
                $major = $id->getMateria()->getFinalizat();
                $seguent = id;
            }

            if ($major == 100) {
                //ATENCIO!!!! S'ha acabat pla d'estudis
            }
        }
    }

    private function actualitzaEstat($id_ant) {
        
    }

}
